apply plugin: 'idea'
apply plugin: 'eclipse'

group = '{{groupId}}'
version = '{{artifactVersion}}'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.+'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
    }
}

repositories {
    mavenCentral()
}

if(hasProperty('target') && target == 'android') {

    apply plugin: 'com.android.library'
    apply plugin: 'com.github.dcendents.android-maven'

    android {
        compileSdkVersion 25
        buildToolsVersion '25.0.2'
        defaultConfig {
            minSdkVersion 14
            targetSdkVersion 25
        }

        compileOptions {
            {{#useJakartaEe}}
            sourceCompatibility JavaVersion.VERSION_17
            targetCompatibility JavaVersion.VERSION_17
            {{/useJakartaEe}}
            {{^useJakartaEe}}
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
            {{/useJakartaEe}}
        }

        // Rename the aar correctly
        libraryVariants.all { variant ->
            variant.outputs.each { output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith('.aar')) {
                    def fileName = "${project.name}-${variant.baseName}-${version}.aar"
                    output.outputFile = new File(outputFile.parent, fileName)
                }
            }
        }

        dependencies {
            provided "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version"
        }
    }

    afterEvaluate {
        android.libraryVariants.all { variant ->
            def task = project.tasks.create "jar${variant.name.capitalize()}", Jar
            task.description = "Create jar artifact for ${variant.name}"
            task.dependsOn variant.javaCompile
            task.from variant.javaCompile.destinationDirectory
            task.destinationDirectory = project.file("${project.buildDir}/outputs/jar")
            task.archiveFileName = "${project.name}-${variant.baseName}-${version}.jar"
            artifacts.add('archives', task);
        }
    }

    task sourcesJar(type: Jar) {
        from android.sourceSets.main.java.srcDirs
        archiveClassifier = 'sources'
    }

    artifacts {
        archives sourcesJar
    }

} else {

    apply plugin: 'java'
    apply plugin: 'maven-publish'

    {{#useJakartaEe}}
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
    {{/useJakartaEe}}
    {{^useJakartaEe}}
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
    {{/useJakartaEe}}

    publishing {
        publications {
            maven(MavenPublication) {
               artifactId = '{{artifactId}}'
               from components.java
            }
        }
    }

    task execute(type:JavaExec) {
       mainClass = System.getProperty('mainClass')
       classpath = sourceSets.main.runtimeClasspath
    }

    task sourcesJar(type: Jar, dependsOn: classes) {
        archiveClassifier = 'sources'
        from sourceSets.main.allSource
    }

    task javadocJar(type: Jar, dependsOn: javadoc) {
        archiveClassifier = 'javadoc'
        from javadoc.destinationDir
    }

    artifacts {
        archives sourcesJar
        archives javadocJar
    }
}

ext {
    {{#swagger1AnnotationLibrary}}
    swagger_annotations_version = "1.6.3"
    {{/swagger1AnnotationLibrary}}
    {{#swagger2AnnotationLibrary}}
    swagger_annotations_version = "2.2.9"
    {{/swagger2AnnotationLibrary}}
    {{#useJakartaEe}}
    spring_boot_version = "3.0.12"
    jakarta_annotation_version = "2.1.1"
    reactor_version = "3.5.12"
    reactor_netty_version = "1.1.13"
    {{/useJakartaEe}}
    {{^useJakartaEe}}
    spring_boot_version = "2.7.17"
    jakarta_annotation_version = "1.3.5"
    reactor_version = "3.4.34"
    reactor_netty_version = "1.0.39"
    {{/useJakartaEe}}
    jackson_version = "2.17.1"
    jackson_databind_version = "2.17.1"
    {{#openApiNullable}}
    jackson_databind_nullable_version = "0.2.6"
    {{/openApiNullable}}
    {{#joda}}
    jodatime_version = "2.9.9"
    {{/joda}}
    junit_version = "5.10.2"
}

dependencies {
    {{#swagger1AnnotationLibrary}}
    implementation "io.swagger:swagger-annotations:$swagger_annotations_version"
    {{/swagger1AnnotationLibrary}}
    {{#swagger2AnnotationLibrary}}
    implementation "io.swagger.core.v3:swagger-annotations:$swagger_annotations_version"
    {{/swagger2AnnotationLibrary}}
    implementation "com.google.code.findbugs:jsr305:3.0.2"
    implementation "io.projectreactor:reactor-core:$reactor_version"
    implementation "org.springframework.boot:spring-boot-starter-webflux:$spring_boot_version"
    implementation "io.projectreactor.netty:reactor-netty-http:$reactor_netty_version"
    implementation "com.fasterxml.jackson.core:jackson-core:$jackson_version"
    implementation "com.fasterxml.jackson.core:jackson-annotations:$jackson_version"
    implementation "com.fasterxml.jackson.core:jackson-databind:$jackson_databind_version"
    implementation "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:$jackson_version"
    {{#openApiNullable}}
    implementation "org.openapitools:jackson-databind-nullable:$jackson_databind_nullable_version"
    {{/openApiNullable}}
    {{#joda}}
    implementation "joda-time:joda-time:$jodatime_version"
    {{/joda}}
    implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jackson_version"
    implementation "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version"
    testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version"
}
